package com.tedu.api;


import org.junit.Test;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;

public class StringBuilderAPI {
    /**
     * 字符串大量报错：注意String造成内存溢出
     * String str="123"+st;
     * Strihg st="456";
     */
    @Test
    public void testString() {
        String str = "字符串";
        for (int i = 0; i < 100000000; i++) {
            str = str + i;  //字符串1 2 3 4 ...
            System.out.println(str);
        }
    }

    /**
     * String------不可改变对象   BUG（常量池）
     * 假设：拼接处1000000000w个String---内存【开销过大】
     * 操作系统发现内存空间越来越小，会去硬盘上开辟空间---程序、电脑会卡
     * <p>
     * 解决方案：不创建新对象，原来对象实现拼接【添加、替换、插入】
     * StringBuilder对象    可变字符对象
     * 语法：StringBuilder sb=new StringBuilder("字符串");
     * <p>
     * C语言      变量  int a=malloc(4);  开辟4个字节空间
     * a=1;
     * free(a);     清理内存
     * Java语言   变量  int a=1  内存开辟a空间，保存1.JVM虚拟机提供GC功能
     * 会存在内存溢出
     */
    @Test
    public void testSB() {
        //创建一个可变的字符串对象【解决String大量拼接，造成内存溢出】
        String str = "你就是我的";
        StringBuilder sb = new StringBuilder(str);
        //append方法 添加新字符串，等同于加号【拼接】
        sb.append("小可爱~");
        System.out.println(sb);
    }
    //*********************************
    /**
     * replace方法     替换   返回值：String
     * 作用：可以将字符串中指定范围内“内容”替换成给定的内容
     *     含头不含尾
     * replace(int start,int end,String str)
     *         开始位置，   结束位置   替换内容
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类,构造器中直接传字符串
        StringBuilder sb=new StringBuilder("你就是我的小可爱~");
        sb.replace(5,8,"小baby");
        System.out.println(sb);
    }


/**
 * insert 方法   插入  返回值：String
 * 作用：将给定字符串插入到当前字符串中某个位置
 * insert(int index,String str)
 *       插入位置 ，插入内容
 */
@Test
public void testInsert(){
    //创建 可变字符串对象
    /**
     * 考试题
     * StringBuilder和StringBuffer的区别？
     * StringBuilder和StringBuffer---方法完全一致【追加、替换、插入】
     * StringBuilder-----JDK1.0------线程安全【效率低】
     * StringBuilder-----JDK1.5------线程不安全【效率高】
     *
     * 需求说明书：模块用什么类【标注】
     */

}
}













